5 SYS 700 6 .OPT OO 10 ;********************************* 20 ;** WINDOW AND POP MENU MANAGER ** 30 ;** BY DARREN JAMES SPRUYT ** 40 ;** ** 50 ;**(C) 1985 BY ** 60 ;** DARREN JAMES SPRUYT ** 90 ;********************************* 1000 ;DEFINE VARIABLES 1010 *=$C000 1015 LPICKAREA =$02 1020 XBY4 =$0256 1030 YBY4 =$0255 1040 AVAIL =$0258 1050 LINE =$0257 2000 START =* 2010 JMP TSPRITE ;PICK AREAS ON 2020 JMP ANPICKAREA ;ADD NEW PICK AREA 2025 JMP POPMENU ;POP MENU 2030 JMP DPICKAREA ;DELETE PICK AREA 2040 JMP PAREASOFF ;PICK AREAS OFF 5000 F1 RTS 10000 POPMENU =* ;POPMENU ENTRY 10002 LDY #0 10004 JSR GETVAL ;GET FOUR 10006 BMI F1 ;PARAMETERS 10008 LDA PICKHEIGHT ;FOR INPUT 10009 CMP #3 ;AND CHECK 10010 BCC F1 ;FOR MINIMUM 10011 LDA PICKWIDTH ;WIDTH AND 10012 CMP #3 ;HEIGHT 10013 BCC F1 10014 STY AVAIL ;SET AVAIL FLG 10016 JSR GETPARAM 10018 STX COLOR ;GET COLOR 10020 JSR $AEFD ;CHECK COMMA 10022 JSR $AD9E ;EVAL INPUT 10024 LDY $65 10026 LDA $64 10028 JSR $B6DB ;CLN DESC STK 10030 LDY #2 10032 LDA ($64),Y 10034 STA $48 ;GET ADD HI 10036 DEY 10038 LDA ($64),Y 10040 STA $47 ;GET ADD LO 10050 LDA $47 10052 BNE EN0 ;DEC ADDRESS 10054 DEC $48 ;BY ONE 10056 EN0 DEC $47 ; 10090 LDA #0 10100 JSR COPY1 ;COPY SECTION 10200 LDY #0 10210 JSR MAKEP ;MAKE PNTR 10220 LDX PICKHEIGHT 10225 JSR COLORLINE 10230 LDY PICKWIDTH 10240 DEY 10250 LDA #$6E ;"[174]" 10260 STA ($FB),Y 10270 DEY 10272 BMI EN1 10280 LDA #$40 ;"[192]" 10290 EN2 STA ($FB),Y 10300 DEY 10302 BMI EN1 10310 BNE EN2 10320 LDA #$70 ;"[176]" 10330 STA ($FB),Y 10340 EN1 STX TEMP 10350 EN1A LDA #$28 ; 10360 LDX #$FB ; 10370 JSR ADD ;INCREASE PNTR 10375 JSR COLORLINE 10380 LDX TEMP ;LINE CNTR 10390 DEX 10400 BEQ EN3 ;EXIT IF DONE 10402 CPX #1 ; 10404 BEQ EN6 10410 LDY #0 10420 LDA #$5D ;"[221]" 10430 STA ($FB),Y 10440 EN4 INY 10450 CPY PICKWIDTH 10460 BEQ EN5 10470 LDA ($47),Y ;GET CHAR 10475 JSR CORRASCII 10480 STA ($FB),Y ;TO SCREEN 10490 JMP EN4 10500 EN5 DEY 10510 LDA #$5D ;"[221]" 10515 STA ($FB),Y 10520 STX TEMP 10530 LDA PICKWIDTH 10540 SEC 10550 SBC #$02 10560 LDX #$47 10570 JSR ADD ;INC PNTR 10580 JMP EN1A 10640 EN6 LDY PICKWIDTH ; 10650 DEY 10660 LDA #$7D ;"[189]" 10670 STA ($FB),Y 10680 LDA #$40 ;"[192]" 10690 EN8 DEY 10700 BEQ EN7 10710 BMI EN3 10720 STA ($FB),Y 10730 JMP EN8 10740 EN7 LDA #$6D ;"[173]" 10750 STA ($FB),Y 10760 ; 10800 EN3 LDX #1 ;SET TO TOP 10810 EP3 JSR REVLINE 10900 EP2 STX TEMP ;SAVE LINE 10905 JSR $FFE4 ;GET CHAR 10907 LDX TEMP 10910 CMP #"[145] ;UP? 10920 BNE EP1 10930 ;UP 10940 CPX #1 ;AT [164]P[153] 10950 BEQ EP2 ;YES 10960 JSR REVLINE ;UNREVRS LINE 10970 DEX 10980 JMP EP3 ;UP 1 11000 EP1 CMP #" ;DOWN? 11010 BNE EP4 11012 TXA 11014 CLC 11016 ADC #2 11020 CMP PICKHEIGHT ;AT BOTTOM 11030 BEQ EP2 ;YES 11040 JSR REVLINE ;UNREVRS LINE 11050 INX 11060 JMP EP3 ;INCREASE LINE 11100 EP4 CMP #$0D ;IS A RETURN 11110 BNE EP2 ;NOPE 11120 STX $0257 ;SET LINE NUM 11130 LDA #$80 ;COPY BACK 11140 JSR COPY1 ;DATA TO SC 11150 LDA #1 ;RELEASE PNTR 11160 STA AVAIL 11170 RTS ;BACK TO BASIC 11499 ; 11500 COLORLINE =* 11510 LDY PICKWIDTH 11520 JSR IMAGEPNTRS ;BACKUP PNTRS 11530 DEY 11540 LDA COLOR ;SET LINE 11550 CL1 STA ($FD),Y ;ACCORDING 11560 DEY 11570 BPL CL1 ;FINISH 11580 RTS 12000 COPY1 STA DIR 12005 LDA #0 ;SET ($22) TO 12010 STA $22 12020 LDA #$B0 ;$B000 12030 STA $23 12032 LDY #0 12034 JSR MAKEP ;MAKE ADDRESS 12040 LDA $01 12050 AND #%11111110 12060 SEI ;LOCK IRQS 12070 STA $01 ;OPEN THE ROM 12080 JSR IMAGEPNTRS 12100 ;TRANSFER FROM ($FB) TO ($22) 12110 LDX PICKHEIGHT 12115 EP9 LDY PICKWIDTH 12120 DEY 12122 EPB LDA DIR 12124 BPL EPA 12126 LDA ($22),Y ;COPY FROM MEMORY 12127 STA ($FB),Y ;TO SCREEN 12128 LDA ($24),Y 12129 STA ($FD),Y 12130 JMP EP8 12132 EPA LDA ($FB),Y;COPY FROM SCREEN 12134 STA ($22),Y ;TO MEMORY 12136 LDA ($FD),Y 12138 STA ($24),Y 12150 EP8 DEY 12160 BPL EPB ;FINISH LINE 12200 ;INC PNTRS 12210 STX TEMP 12220 LDA #$28 ;ADD $28 TO $FB 12230 LDX #$FB 12240 JSR ADD 12250 LDA #$28 ;ADD $28 TO $FB 12260 LDX #$22 12270 JSR ADD 12275 JSR IMAGEPNTRS ;COPY PNTRS 12280 LDX TEMP 12290 DEX 12300 BNE EP9 ;FINISH ALL LINES 12310 LDA $01 12320 ORA #%00000001 12330 STA $01 ;CLOSE ROMS 12340 CLI 12400 RTS ;AND FINISH UP 12900 IMAGEPNTRS =* 12905 LDA $22 ;BACKUP ($22) TO 12910 STA $24 12915 LDA $23 12920 ORA #$04 12925 STA $25 ;($24) 12930 LDA $FB ;BACKUP ($FB) TO 12935 STA $FD 12940 LDA $FC 12945 AND #$03 12950 ORA #$D8 12955 STA $FE ;($FD) 12960 RTS 13000 REVLINE =* 13020 LDY #0 ; 13030 TXA ;.X HOLDS LINE 13032 STA TEMP 13040 CLC 13050 ADC PAREAY ;ADD PICK OFFSET 13055 TAX 13060 JSR MAKEP1 ;MAKE PNTR 13070 LDY PICKWIDTH ;GET WIDTH OF LINE 13080 DEY 13082 DEY 13090 RVL1 LDA ($FB),Y 13100 EOR #$80 ;REVERSE CHAR 13110 STA ($FB),Y ;BACK TO SC 13120 DEY 13130 BNE RVL1 ;FINISH LINE 13135 LDX TEMP ;RESTORE .X 13140 RTS 14999 ; 15000 DPICKAREA =* 15010 JSR GETPARAM ;GET PICK ARE 15020 CPX #17 15030 BCS EP7 ;ERROR SO EXIT 15050 LDA #0 15060 STA PAREASOPEN,X;DELETE WITH 0 15070 RTS ;DONE 15080 EP7 LDA #$FF ;ERROR RETURN 15090 RTS 15989 ; 15999 PAREASOFF =* ;TURN AREAS OFF 16000 LDA $D015 16010 AND #%01111111 16020 STA $D015 ;TURN OF SPRITE 16030 SEI 16040 LDA #$EA 16050 STA $0315 ;RESET IRQ 16060 LDA #$31 16070 STA $0314 ;VECTOR AND 16080 CLI 16090 RTS ;EXIT 16999 ; 19000 ADD =* ;ADD ROUTINE 19010 CLC 19020 ADC $00,X ;ADD VALUE IN .A 19030 STA $00,X 19040 BCC ADD1 ;TO INDIRECT 19050 INC $01,X 19060 ADD1 RTS ;AT $00,X 19069 ; 19100 CORRASCII =* ;CORRECT ASCII 19110 CMP #$40 19120 BCC CR1 ;CHARACTERS 19130 SBC #$40 19140 CR1 CMP #$80 ;BEFORE PLACING 19150 BCC CR2 19160 SBC #$40 ;ON THE SCREEN 19170 CR2 RTS 19999 ; 20000 ANPICKAREA =* 20010 LDY #16 20014 AN0 LDA PAREASOPEN,Y 20016 BEQ AN1 20020 DEY 20022 BNE AN0 20040 LDA #$FE 20060 EP6 RTS 20100 AN1 =* 20110 JSR GETVAL 20120 BMI EP6 20130 STA PAREASOPEN,Y 20140 RTS 20200 GETVAL JSR GETPARAM 20210 CMP #40 20220 BCS ERROR 20230 STA PAREAX,Y 20240 JSR GETPARAM 20250 CMP #25 20260 BCS ERROR 20270 STA PAREAY,Y 20280 JSR GETPARAM 20285 BEQ ERROR 20290 STA PICKWIDTH,Y 20292 CLC 20294 ADC PAREAX,Y 20296 CMP #40 20298 BCS ERROR 20300 JSR GETPARAM 20305 BEQ ERROR 20307 STA PICKHEIGHT,Y 20310 CLC 20312 ADC PAREAY 20314 CMP #25 20316 BCS ERROR 20320 LDA #1 20340 RTS 20350 ERROR =* 20360 LDA #$FF 20380 RTS 29000 IRQENTRY =* 29100 LDA #>RETCALL ; 29110 PHA 29120 LDA #IRQENTRY 41030 STA $0315 41040 LDA #